2db9e9482d554afba33d0a2066fd41350babd535,src/org/opencms/db/generic/CmsHistoryDriver.java,CmsHistoryDriver,deleteEntries,#CmsDbContext#I_CmsHistoryResource#number#number#,124
Before Change
}
}
if ((maxVersion - versionsToKeep) <= 0) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
// get the minimal structure publish tag to keep for this sibling
int minStrPublishTagToKeep = -1;
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MAXTAG_FOR_VERSION");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, (1 + maxVersion) - versionsToKeep);
res = stmt.executeQuery();
if (res.next()) {
minStrPublishTagToKeep = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the statement and the result is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (minStrPublishTagToKeep < 1) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
minStrPublishTagToKeep++;
// delete the properties
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, "C_PROPERTIES_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// delete the structure entries
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
int structureVersions = stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// get the minimal resource publish tag to keep,
// all entries with publish tag less than this will be deleted
After Change
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER");
stmt.setString(1, resource.getStructureId().toString());
res = stmt.executeQuery();
boolean noHistoryStructure = false;
if (res.next()) {
maxVersion = res.getInt(1);
noHistoryStructure |= res.wasNull();
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the connection is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (time >= 0) {
int maxVersionByTime = -1;
conn = m_sqlManager.getConnection(dbc);
// get the maximal version to keep for this resource based on the time parameter
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER_BYTIME");
stmt.setString(1, resource.getStructureId().toString());
stmt.setLong(2, time);
res = stmt.executeQuery();
if (res.next()) {
maxVersionByTime = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (maxVersionByTime > 0) {
if (versionsToKeep < 0) {
versionsToKeep = (maxVersion - maxVersionByTime);
} else {
versionsToKeep = Math.min(versionsToKeep, (maxVersion - maxVersionByTime));
}
}
}
int structureVersions = 0;
conn = m_sqlManager.getConnection(dbc);
if (!noHistoryStructure) {
if (((maxVersion - versionsToKeep) <= 0)) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
// get the minimal structure publish tag to keep for this sibling
int minStrPublishTagToKeep = -1;
stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MAXTAG_FOR_VERSION");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, (1 + maxVersion) - versionsToKeep);
res = stmt.executeQuery();
if (res.next()) {
minStrPublishTagToKeep = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the statement and the result is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (minStrPublishTagToKeep < 1) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
minStrPublishTagToKeep++;
// delete the properties
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, "C_PROPERTIES_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// delete the structure entries
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
structureVersions = stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
}
// get the minimal resource publish tag to keep,